home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
015
/
epsilon.arc
/
VERSIONS.ARC
/
FILES.E
< prev
next >
Wrap
Text File
|
1986-04-06
|
7KB
|
329 lines
/************************************************************************
* "Epsilon", "EEL" and "Lugaru" are trademarks of Lugaru Software, Ltd. *
* *
* Copyright (C) 1985 Lugaru Software Ltd. All rights reserved. *
* *
* Limited permission is hereby granted to reproduce and modify this *
* copyrighted material provided that the resulting code is used only in *
* conjunction with Lugaru products and that this notice is retained in *
* any such reproduction or modification. *
************************************************************************/
/*
* Modifications copyright (c) 1986 by David Dyer-Bennet
* Permission for non-commercial use is hereby granted; all other
* rights are reserved.
*
* Modifications by David Dyer-Bennet
* Terrabit Software
* 4242 Minnehaha Ave S
* Minneapolis, MN 55406
* Sysop of Fido 14/341, The Terraboard, (612) 721-8967 3/12/24 24hrs
* (612) 721-8800 NOT 24 hrs! More like noon to midnight
*/
/*
* Revision history:
*
* Edit Date Who Description
*
* Version 1.0
* 0 12-Nov-85 Lugaru Epsilon Version 3.01
* 1 6-Apr-86 DD-B Add support for versions
*/
#include "eel.h"
#include "versions.h"
/* Ask for a file name and save buffer to that file if one is given. */
command write_file() on cx_tab[CTRL('W')]
{
char tmp[FNAMELEN];
iter = 0;
get_file(tmp, "Write file: ");
if (*tmp) {
filename = tmp;
return save_file();
}
return 0;
}
command copy_to_file()
{
char tmp[FNAMELEN], orig[FNAMELEN];
iter = 0;
strcpy(orig,filename);
get_file(tmp, "Copy to file: ");
if (tmp[0] != '\0')
filename = tmp;
save_file();
filename = orig;
}
command visit_file() on cx_tab[CTRL('V')]
{
char tmp[FNAMELEN];
char resp[80];
iter = 0;
get_file(tmp, "Visit file: ");
if (tmp[0] == '\0')
if (!filename)
return;
else
strcpy(tmp, filename);
if (!has_arg && modified) { /* buffer need to be saved? */
get_string(resp, "Save buffer? [y]");
if (toupper(*resp) != 'N')
save_file();
}
read_file(tmp);
}
/* read the specifed file into the current buffer */
read_file(tmp)
char *tmp;
{
int err;
filename = tmp;
err = file_read(filename, strip_returns);
if (err == 2) {
zap(bufname);
modified = 0;
say("%s: New file.",tmp);
} else if (err)
file_error(err, tmp, "read error");
}
/* user routine to save a file. used by various other user routines. Returns
non-zero and prints message in echo area if some sort of error happened. */
command save_file() on cx_tab[CTRL('S')]
{
int err;
iter = 0;
if (!*filename)
return write_file();
if (vers_edit) { /* [1] add */
if (strcmp (filename, vers_name) == 0) {
/* File is being saved as a versioned file */
versions_save ();
}
} /* [1] end add */
if (err = file_write(filename, strip_returns))
file_error(err,filename,"write error");
else
say("%s written.", filename);
return err;
}
command change_modified() on reg_tab[ALT('~')]
{
modified = has_arg? (iter != 0) : !modified;
iter = 0;
}
list_line(inbuffer) /* insert a line into the buffer list */
char *inbuffer;
{
char file[FNAMELEN], msg[80];
relative(filename, file);
sprintf(msg, " %7d %c %-16s %s\n",
size(), modified ? '*' : ' ', bufname, file);
bufname = inbuffer;
stuff(msg);
}
make_buffer_list(all, inbuffer) /* put buffer list in specified buffer */
char *inbuffer;
{
char *old = bufname, *s;
create(inbuffer);
zap(inbuffer);
s = buffer_list(1);
do {
bufname = s;
if (*filename != '\0')
list_line(inbuffer);
} while (s = buffer_list(0));
if (all) {
s = buffer_list(1);
do {
bufname = s;
if (*filename == '\0')
list_line(inbuffer);
} while (s = buffer_list(0));
iter=0;
}
bufname = inbuffer;
point = 0;
stuff(" Size Buffer File\n");
point = 0;
bufname = old;
}
command list_buffers() on cx_tab[CTRL('B')]
{
make_buffer_list(has_arg, "help");
view_buffer("help");
}
command save_all_buffers()
{
char *old = bufname, *s;
s = buffer_list(1);
do {
bufname = s;
if (*filename != '\0' && modified)
if(save_file()){
bufname = old;
quick_abort();
}
} while (s = buffer_list(0));
bufname = old;
}
make_bname(fname, bname) /* build buffer name from file name for find-file */
char *fname, *bname;
{
int uniq = 1, ok;
char *from, *to, *oldbuf;
strcpy(bname, get_tail(fname, 0));
bname[14] = 0; /* make no long buffer names */
if (!(to = rindex(bname, '.')) || to == bname)
to = bname + strlen(bname);
while (exist(bname)) {
oldbuf = bufname;
bufname = bname;
ok = (size() == 0);
bufname = oldbuf;
if (ok) return;
sprintf(to, "<%d>", uniq++);
}
}
command find_file() on cx_tab[CTRL('F')]
{
char fname[FNAMELEN];
iter = 0;
get_file(fname, "Find file: ");
find_it(fname);
}
find_it(fname) /* find named file (must be in absolute form) */
char *fname;
{
char bname[FNAMELEN+10], *s, mode[80];
if (fname[0] == '\0' || strcmp(filename, fname) == 0)
return;
s = buffer_list(1);
do {
bufname = s;
if (strcmp(filename, fname) == 0) {
to_buffer(s);
return;
}
} while (s = buffer_list(0));
make_bname(fname, bname);
to_buffer(bname);
if (has_arg) {
strip_returns = 0;
make_mode();
}
read_file(fname);
if (*get_extension(fname)) {
sprintf(mode, "suffix-%s", get_extension(fname) + 1);
try_calling(mode);
}
}
command count_lines() on cx_tab['l']
{
int count = 0, here = 0, start = point;
sayput("Counting...");
point = 0;
while (nl_forward()) {
count++;
if (!here && start < point)
here = count;
}
point = start;
if (!here)
here = count + 1;
say("%d lines, point on line %d. %d bytes on disk.",
count + 1, here, size() + (strip_returns ? count : 0));
}
command show_point() on cx_tab['=']
{
say("Column=%d, point=%d, size=%d", current_column(), point, size());
}
char prev_byte_name[80];
char prev_state[80];
command write_state()
{
char msg[80], fname[80], rel[80], *s;
int err;
if (!*prev_state) {
s = lookpath("epsilon.sta");
strcpy(prev_state, s ? s : "epsilon.sta");
}
relative(prev_state, rel);
sprintf(msg, "Write current state on file [%s]: ", rel);
get_file(fname, msg);
if (!*fname)
strcpy(fname, prev_state);
if (!*fname)
return;
do_save_state(fname);
strcpy(prev_state, fname);
iter = 0;
}
do_save_state(fname) /* save state in file, aborting on error */
char *fname;
{
char file[80], rel[80];
int err;
strcpy(file, fname);
get_doc(); /* save doc file position too */
sayput("Writing...");
strcpy(get_extension(file), ".sta");
relative(file, rel);
if (err = save_state(file))
file_error(err, file, "write error");
else
say("State saved on %s.", rel);
}
command set_line_translate()
{
strip_returns = (has_arg? (iter != 0) : !strip_returns);
say(strip_returns ? "Add/remove return characters"
: "No changes when reading or writing");
make_mode();
iter = 1;
}